home *** CD-ROM | disk | FTP | other *** search
- Path: xanth!cs.odu.edu!Amiga-Request
- From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
- Newsgroups: comp.sources.amiga
- Subject: v90i129: tar - tape archive utility, Part04/05
- Message-ID: <11983@xanth.cs.odu.edu>
- Date: 29 Mar 90 03:11:41 GMT
- Sender: tadguy@cs.odu.edu
- Reply-To: hue@netcom.uucp (Jonathan Hue)
- Lines: 1066
- Approved: tadguy@cs.odu.edu (Tad Guy)
- X-Mail-Submissions-To: Amiga@cs.odu.edu
- X-Post-Discussions-To: comp.sys.amiga
-
- Submitted-by: hue@netcom.uucp (Jonathan Hue)
- Posting-number: Volume 90, Issue 129
- Archive-name: unix/tar/part04
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 4 (of 5)."
- # Contents: buffer.c tar.5.man.uu
- # Wrapped by tadguy@xanth on Wed Mar 28 22:07:21 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'buffer.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'buffer.c'\"
- else
- echo shar: Extracting \"'buffer.c'\" \(16160 characters\)
- sed "s/^X//" >'buffer.c' <<'END_OF_FILE'
- X/*
- X * Buffer management for public domain tar.
- X *
- X * Written by John Gilmore, ihnp4!hoptoad!gnu, on 25 August 1985.
- X *
- X * @(#) buffer.c 1.28 11/6/87 Public Domain - gnu
- X */
- X
- X#include <stdio.h>
- X#include <errno.h>
- X#include <sys/types.h> /* For non-Berkeley systems */
- X#include <sys/stat.h>
- X#include <signal.h>
- X
- X#if defined(MSDOS) || defined (AMIGA)
- X# include <fcntl.h>
- X#else
- X# ifdef XENIX
- X# include <sys/inode.h>
- X# endif
- X# include <sys/file.h>
- X#endif
- X
- X#include "tar.h"
- X#include "port.h"
- X
- X#define STDIN 0 /* Standard input file descriptor */
- X#define STDOUT 1 /* Standard output file descriptor */
- X
- X#define PREAD 0 /* Read file descriptor from pipe() */
- X#define PWRITE 1 /* Write file descriptor from pipe() */
- X
- Xextern char *valloc();
- Xextern char *index(), *strcat();
- X
- X/*
- X * V7 doesn't have a #define for this.
- X */
- X#ifndef O_RDONLY
- X#define O_RDONLY 0
- X#endif
- X
- X#define MAGIC_STAT 105 /* Magic status returned by child, if
- X it can't exec. We hope compress/sh
- X never return this status! */
- X/*
- X * The record pointed to by save_rec should not be overlaid
- X * when reading in a new tape block. Copy it to record_save_area first, and
- X * change the pointer in *save_rec to point to record_save_area.
- X * Saved_recno records the record number at the time of the save.
- X * This is used by annofile() to print the record number of a file's
- X * header record.
- X */
- Xstatic union record **save_rec;
- Xstatic union record record_save_area;
- Xstatic long saved_recno;
- X
- X/*
- X * PID of child program, if f_compress or remote archive access.
- X */
- Xstatic int childpid = 0;
- X
- X/*
- X * Record number of the start of this block of records
- X */
- Xstatic long baserec;
- X
- X/*
- X * Error recovery stuff
- X */
- Xstatic int r_error_count;
- X
- X/*
- X * Have we hit EOF yet?
- X */
- Xstatic int eof;
- X
- X
- X/*
- X * Return the location of the next available input or output record.
- X * Return NULL for EOF. Once we have returned NULL, we just keep returning
- X * it, to avoid accidentally going on to the next file on the "tape".
- X */
- Xunion record *
- Xfindrec()
- X{
- X if (ar_record == ar_last) {
- X if (eof)
- X return (union record *)NULL; /* EOF */
- X flush_archive();
- X if (ar_record == ar_last) {
- X eof++;
- X return (union record *)NULL; /* EOF */
- X }
- X }
- X return ar_record;
- X}
- X
- X
- X/*
- X * Indicate that we have used all records up thru the argument.
- X * (should the arg have an off-by-1? XXX FIXME)
- X */
- Xvoid
- Xuserec(rec)
- X union record *rec;
- X{
- X while(rec >= ar_record)
- X ar_record++;
- X /*
- X * Do NOT flush the archive here. If we do, the same
- X * argument to userec() could mean the next record (if the
- X * input block is exactly one record long), which is not what
- X * is intended.
- X */
- X if (ar_record > ar_last)
- X abort();
- X}
- X
- X
- X/*
- X * Return a pointer to the end of the current records buffer.
- X * All the space between findrec() and endofrecs() is available
- X * for filling with data, or taking data from.
- X */
- Xunion record *
- Xendofrecs()
- X{
- X return ar_last;
- X}
- X
- X#ifndef AMIGA
- X/*
- X * Duplicate a file descriptor into a certain slot.
- X * Equivalent to BSD "dup2" with error reporting.
- X */
- Xvoid
- Xdupto(from, to, msg)
- X int from, to;
- X char *msg;
- X{
- X int err;
- X
- X if (from != to) {
- X (void) close(to);
- X err = dup(from);
- X if (err != to) {
- X fprintf(stderr, "tar: cannot dup ");
- X perror(msg);
- X exit(EX_SYSTEM);
- X }
- X (void) close(from);
- X }
- X}
- X#endif
- X
- X/*
- X * Fork a child to deal with remote files or compression.
- X * If rem_host is zero, we are called only for compression.
- X */
- Xvoid
- Xchild_open(rem_host, rem_file)
- X char *rem_host, *rem_file;
- X{
- X
- X#ifdef MSDOS
- X fprintf(stderr,
- X "MSDOS %s cannot deal with compressed or remote archives\n", tar);
- X exit(EX_ARGSBAD);
- X#else
- X#ifdef AMIGA
- X fprintf(stderr,
- X "Amiga %s cannot deal with compressed archives\n", tar);
- X exit(EX_ARGSBAD);
- X#else
- X
- X int pipes[2];
- X int err;
- X struct stat arstat;
- X char cmdbuf[1000]; /* For big file and host names */
- X
- X /* Create a pipe to talk to the child over */
- X err = pipe(pipes);
- X if (err < 0) {
- X perror ("tar: cannot create pipe to child");
- X exit(EX_SYSTEM);
- X }
- X
- X /* Fork child process */
- X childpid = fork();
- X if (childpid < 0) {
- X perror("tar: cannot fork");
- X exit(EX_SYSTEM);
- X }
- X
- X /*
- X * Parent process. Clean up.
- X *
- X * We always close the archive file (stdin, stdout, or opened file)
- X * since the child will end up reading or writing that for us.
- X * Note that this may leave standard input closed.
- X * We close the child's end of the pipe since they will handle
- X * that too; and we set <archive> to the other end of the pipe.
- X *
- X * If reading, we set f_reblock since reading pipes or network
- X * sockets produces odd length data.
- X */
- X if (childpid > 0) {
- X (void) close (archive);
- X if (ar_reading) {
- X (void) close (pipes[PWRITE]);
- X archive = pipes[PREAD];
- X f_reblock++;
- X } else {
- X (void) close (pipes[PREAD]);
- X archive = pipes[PWRITE];
- X }
- X return;
- X }
- X
- X /*
- X * Child process.
- X */
- X if (ar_reading) {
- X /*
- X * Reading from the child...
- X *
- X * Close the read-side of the pipe, which our parent will use.
- X * Move the write-side of pipe to stdout,
- X * If local, move archive input to child's stdin,
- X * then run the child.
- X */
- X (void) close (pipes[PREAD]);
- X dupto(pipes[PWRITE], STDOUT, "to stdout");
- X if (rem_host) {
- X (void) close (STDIN); /* rsh abuses stdin */
- X if (STDIN != open("/dev/null"))
- X perror("Can't open /dev/null");
- X sprintf(cmdbuf,
- X "rsh '%s' dd '<%s' bs=%db",
- X rem_host, rem_file, blocking);
- X if (f_compress)
- X strcat(cmdbuf, "| compress -d");
- X#ifdef DEBUG
- X fprintf(stderr, "Exec-ing: %s\n", cmdbuf);
- X#endif
- X execlp("sh", "sh", "-c", cmdbuf, (char *)0);
- X perror("tar: cannot exec sh");
- X } else {
- X /*
- X * If we are reading a disk file, compress is OK;
- X * otherwise, we have to reblock the input in case it's
- X * coming from a tape drive. This is an optimization.
- X */
- X dupto(archive, STDIN, "to stdin");
- X err = fstat(STDIN, &arstat);
- X if (err != 0) {
- X perror("tar: can't fstat archive");
- X exit(EX_SYSTEM);
- X }
- X if ((arstat.st_mode & S_IFMT) == S_IFREG) {
- X execlp("compress", "compress", "-d", (char *)0);
- X perror("tar: cannot exec compress");
- X } else {
- X /* Non-regular file needs dd before compress */
- X sprintf(cmdbuf,
- X "dd bs=%db | compress -d",
- X blocking);
- X#ifdef DEBUG
- X fprintf(stderr, "Exec-ing: %s\n", cmdbuf);
- X#endif
- X execlp("sh", "sh", "-c", cmdbuf, (char *)0);
- X perror("tar: cannot exec sh");
- X }
- X }
- X exit(MAGIC_STAT);
- X } else {
- X /*
- X * Writing archive to the child.
- X * It would like to run either:
- X * compress
- X * compress | dd obs=20b
- X * rsh 'host' dd obs=20b '>foo'
- X * or compress | rsh 'host' dd obs=20b '>foo'
- X *
- X * We need the dd to reblock the output to the
- X * user's specs, if writing to a device or over
- X * the net. However, it produces a stupid
- X * message about how many blocks it processed.
- X * Because the shell on the remote end could be just
- X * about any shell, we can't depend on it to do
- X * redirect stderr properly for us -- the csh
- X * doesn't use the same syntax as the Bourne shell.
- X * On the other hand, if we just ignore stderr on
- X * this end, we won't see errors from rsh, or from
- X * the inability of "dd" to write its output file.
- X * The combination of the local sh, the rsh, the
- X * remote csh, and maybe a remote sh conspires to mess
- X * up any possible quoting method, so grumble! we
- X * punt and just accept the fucking "xxx blocks"
- X * messages. The real fix would be a "dd" that
- X * would shut up.
- X *
- X * Close the write-side of the pipe, which our parent will use.
- X * Move the read-side of the pipe to stdin,
- X * If local, move archive output to the child's stdout.
- X * then run the child.
- X */
- X (void) close (pipes[PWRITE]);
- X dupto(pipes[PREAD], STDIN, "to stdin");
- X if (!rem_host)
- X dupto(archive, STDOUT, "to stdout");
- X
- X cmdbuf[0] = '\0';
- X if (f_compress) {
- X if (!rem_host) {
- X err = fstat(STDOUT, &arstat);
- X if (err != 0) {
- X perror("tar: can't fstat archive");
- X exit(EX_SYSTEM);
- X }
- X if ((arstat.st_mode & S_IFMT) == S_IFREG) {
- X execlp("compress", "compress", (char *)0);
- X perror("tar: cannot exec compress");
- X }
- X }
- X strcat(cmdbuf, "compress | ");
- X }
- X if (rem_host) {
- X sprintf(cmdbuf+strlen(cmdbuf),
- X "rsh '%s' dd obs=%db '>%s'",
- X rem_host, blocking, rem_file);
- X } else {
- X sprintf(cmdbuf+strlen(cmdbuf),
- X "dd obs=%db",
- X blocking);
- X }
- X#ifdef DEBUG
- X fprintf(stderr, "Exec-ing: %s\n", cmdbuf);
- X#endif
- X execlp("sh", "sh", "-c", cmdbuf, (char *)0);
- X perror("tar: cannot exec sh");
- X exit(MAGIC_STAT);
- X }
- X#endif /* AMIGA */
- X#endif /* MSDOS */
- X}
- X
- X
- X/*
- X * Open an archive file. The argument specifies whether we are
- X * reading or writing.
- X */
- Xopen_archive(read)
- X int read;
- X{
- X char *colon, *slash;
- X char *rem_host = 0, *rem_file;
- X
- X#ifndef AMIGA
- X colon = index(ar_file, ':');
- X if (colon) {
- X slash = index(ar_file, '/');
- X if (slash && slash > colon) {
- X /*
- X * Remote file specified. Parse out separately,
- X * and don't try to open it on the local system.
- X */
- X rem_file = colon + 1;
- X rem_host = ar_file;
- X *colon = '\0';
- X goto gotit;
- X }
- X }
- X#endif
- X if (ar_file[0] == '-' && ar_file[1] == '\0') {
- X f_reblock++; /* Could be a pipe, be safe */
- X if (read) archive = STDIN;
- X else archive = STDOUT;
- X } else if (read) {
- X archive = open(ar_file, O_RDONLY);
- X } else {
- X archive = creat(ar_file, 0666);
- X }
- X
- X if (archive < 0) {
- X perror(ar_file);
- X exit(EX_BADARCH);
- X }
- X
- X#ifdef MSDOS
- X setmode(archive, O_BINARY);
- X#endif
- X
- Xgotit:
- X if (blocksize == 0) {
- X fprintf(stderr, "tar: invalid value for blocksize\n");
- X exit(EX_ARGSBAD);
- X }
- X
- X /*NOSTRICT*/
- X ar_block = (union record *) valloc((unsigned)blocksize);
- X if (!ar_block) {
- X fprintf(stderr,
- X "tar: could not allocate memory for blocking factor %d\n",
- X blocking);
- X exit(EX_ARGSBAD);
- X }
- X
- X ar_record = ar_block;
- X ar_last = ar_block + blocking;
- X ar_reading = read;
- X
- X if (f_compress || rem_host)
- X child_open(rem_host, rem_file);
- X
- X if (read) {
- X ar_last = ar_block; /* Set up for 1st block = # 0 */
- X (void) findrec(); /* Read it in, check for EOF */
- X }
- X}
- X
- X
- X/*
- X * Remember a union record * as pointing to something that we
- X * need to keep when reading onward in the file. Only one such
- X * thing can be remembered at once, and it only works when reading
- X * an archive.
- X *
- X * We calculate "offset" then add it because some compilers end up
- X * adding (baserec+ar_record), doing a 9-bit shift of baserec, then
- X * subtracting ar_block from that, shifting it back, losing the top 9 bits.
- X */
- Xsaverec(pointer)
- X union record **pointer;
- X{
- X long offset;
- X
- X save_rec = pointer;
- X offset = ar_record - ar_block;
- X saved_recno = baserec + offset;
- X}
- X
- X/*
- X * Perform a write to flush the buffer.
- X */
- Xfl_write()
- X{
- X int err;
- X
- X err = write(archive, ar_block->charptr, blocksize);
- X if (err == blocksize) return;
- X /* FIXME, multi volume support on write goes here */
- X if (err < 0)
- X perror(ar_file);
- X else
- X fprintf(stderr, "tar: %s: write failed, short %d bytes\n",
- X ar_file, blocksize - err);
- X exit(EX_BADARCH);
- X}
- X
- X
- X/*
- X * Handle read errors on the archive.
- X *
- X * If the read should be retried, readerror() returns to the caller.
- X */
- Xvoid
- Xreaderror()
- X{
- X# define READ_ERROR_MAX 10
- X
- X read_error_flag++; /* Tell callers */
- X
- X annorec(stderr, tar);
- X fprintf(stderr, "Read error on ");
- X perror(ar_file);
- X
- X if (baserec == 0) {
- X /* First block of tape. Probably stupidity error */
- X exit(EX_BADARCH);
- X }
- X
- X /*
- X * Read error in mid archive. We retry up to READ_ERROR_MAX times
- X * and then give up on reading the archive. We set read_error_flag
- X * for our callers, so they can cope if they want.
- X */
- X if (r_error_count++ > READ_ERROR_MAX) {
- X annorec(stderr, tar);
- X fprintf(stderr, "Too many errors, quitting.\n");
- X exit(EX_BADARCH);
- X }
- X return;
- X}
- X
- X
- X/*
- X * Perform a read to flush the buffer.
- X */
- Xfl_read()
- X{
- X int err; /* Result from system call */
- X int left; /* Bytes left */
- X char *more; /* Pointer to next byte to read */
- X
- X /*
- X * Clear the count of errors. This only applies to a single
- X * call to fl_read. We leave read_error_flag alone; it is
- X * only turned off by higher level software.
- X */
- X r_error_count = 0; /* Clear error count */
- X
- X /*
- X * If we are about to wipe out a record that
- X * somebody needs to keep, copy it out to a holding
- X * area and adjust somebody's pointer to it.
- X */
- X if (save_rec &&
- X *save_rec >= ar_record &&
- X *save_rec < ar_last) {
- X record_save_area = **save_rec;
- X *save_rec = &record_save_area;
- X }
- Xerror_loop:
- X err = read(archive, ar_block->charptr, blocksize);
- X if (err == blocksize) return;
- X if (err < 0) {
- X readerror();
- X goto error_loop; /* Try again */
- X }
- X
- X more = ar_block->charptr + err;
- X left = blocksize - err;
- X
- Xagain:
- X if (0 == (((unsigned)left) % RECORDSIZE)) {
- X /* FIXME, for size=0, multi vol support */
- X /* On the first block, warn about the problem */
- X if (!f_reblock && baserec == 0 && f_verbose && err > 0) {
- X annorec(stderr, tar);
- X fprintf(stderr, "Blocksize = %d record%s\n",
- X err / RECORDSIZE, (err > RECORDSIZE)? "s": "");
- X }
- X ar_last = ar_block + ((unsigned)(blocksize - left))/RECORDSIZE;
- X return;
- X }
- X if (f_reblock) {
- X /*
- X * User warned us about this. Fix up.
- X */
- X if (left > 0) {
- Xerror2loop:
- X err = read(archive, more, left);
- X if (err < 0) {
- X readerror();
- X goto error2loop; /* Try again */
- X }
- X if (err == 0) {
- X annorec(stderr, tar);
- X fprintf(stderr,
- X "%s: eof not on block boundary, strange...\n",
- X ar_file);
- X exit(EX_BADARCH);
- X }
- X left -= err;
- X more += err;
- X goto again;
- X }
- X } else {
- X annorec(stderr, tar);
- X fprintf(stderr, "%s: read %d bytes, strange...\n",
- X ar_file, err);
- X exit(EX_BADARCH);
- X }
- X}
- X
- X
- X/*
- X * Flush the current buffer to/from the archive.
- X */
- Xflush_archive()
- X{
- X
- X baserec += ar_last - ar_block; /* Keep track of block #s */
- X ar_record = ar_block; /* Restore pointer to start */
- X ar_last = ar_block + blocking; /* Restore pointer to end */
- X
- X if (!ar_reading)
- X fl_write();
- X else
- X fl_read();
- X}
- X
- X/*
- X * Close the archive file.
- X */
- Xclose_archive()
- X{
- X int child;
- X int status;
- X
- X if (!ar_reading) flush_archive();
- X (void) close(archive);
- X
- X#if !defined(MSDOS) && !defined(AMIGA)
- X if (childpid) {
- X /*
- X * Loop waiting for the right child to die, or for
- X * no more kids.
- X */
- X while (((child = wait(&status)) != childpid) && child != -1)
- X ;
- X
- X if (child != -1) {
- X switch (TERM_SIGNAL(status)) {
- X case 0:
- X /* Child voluntarily terminated -- but why? */
- X if (TERM_VALUE(status) == MAGIC_STAT) {
- X exit(EX_SYSTEM);/* Child had trouble */
- X }
- X if (TERM_VALUE(status) == (SIGPIPE + 128)) {
- X /*
- X * /bin/sh returns this if its child
- X * dies with SIGPIPE. 'Sok.
- X */
- X break;
- X } else if (TERM_VALUE(status))
- X fprintf(stderr,
- X "tar: child returned status %d\n",
- X TERM_VALUE(status));
- X case SIGPIPE:
- X break; /* This is OK. */
- X
- X default:
- X fprintf(stderr,
- X "tar: child died with signal %d%s\n",
- X TERM_SIGNAL(status),
- X TERM_COREDUMP(status)? " (core dumped)": "");
- X }
- X }
- X }
- X#endif /* MSDOS */
- X}
- X
- X
- X/*
- X * Message management.
- X *
- X * anno writes a message prefix on stream (eg stdout, stderr).
- X *
- X * The specified prefix is normally output followed by a colon and a space.
- X * However, if other command line options are set, more output can come
- X * out, such as the record # within the archive.
- X *
- X * If the specified prefix is NULL, no output is produced unless the
- X * command line option(s) are set.
- X *
- X * If the third argument is 1, the "saved" record # is used; if 0, the
- X * "current" record # is used.
- X */
- Xvoid
- Xanno(stream, prefix, savedp)
- X FILE *stream;
- X char *prefix;
- X int savedp;
- X{
- X# define MAXANNO 50
- X char buffer[MAXANNO]; /* Holds annorecment */
- X# define ANNOWIDTH 13
- X int space;
- X long offset;
- X
- X /* Make sure previous output gets out in sequence */
- X if (stream == stderr)
- X fflush(stdout);
- X if (f_sayblock) {
- X if (prefix) {
- X fputs(prefix, stream);
- X putc(' ', stream);
- X }
- X offset = ar_record - ar_block;
- X sprintf(buffer, "rec %d: ",
- X savedp? saved_recno:
- X baserec + offset);
- X fputs(buffer, stream);
- X space = ANNOWIDTH - strlen(buffer);
- X if (space > 0) {
- X fprintf(stream, "%*s", space, "");
- X }
- X } else if (prefix) {
- X fputs(prefix, stream);
- X fputs(": ", stream);
- X }
- X}
- END_OF_FILE
- if test 16160 -ne `wc -c <'buffer.c'`; then
- echo shar: \"'buffer.c'\" unpacked with wrong size!
- fi
- # end of 'buffer.c'
- fi
- if test -f 'tar.5.man.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'tar.5.man.uu'\"
- else
- echo shar: Extracting \"'tar.5.man.uu'\" \(19528 characters\)
- sed "s/^X//" >'tar.5.man.uu' <<'END_OF_FILE'
- Xbegin 644 tar.5.man
- XM"@H*("`@("!4"%0(5`A400A!"$$(05((4@A2"%(H""@(*`@H-0@U"#4(-2D(W
- XM*0@I""D@("`@("`@("`@("`@00A!"$$(06T(;0AM"&UI"&D(:0AI9PAG"&<(<
- XM9V$(80AA"&%$"$0(1`A$3PA/"$\(3U,(4PA3"%,@*`@H""@(*#$(,0@Q"#$U,
- XM"#4(-0@U($\(3PA/"$]C"&,(8PAC=`AT"'0(=&\(;PAO"&]B"&((8@AB90AE]
- XM"&4(97((<@AR"'(@,0@Q"#$(,3D(.0@Y"#DX"#@(.`@X-P@W"#<(-RD(*0@II
- XM""D@("`@("`@("`@("`@(%0(5`A4"%1!"$$(00A!4@A2"%((4B@(*`@H""@U"
- XM"#4(-0@U*0@I""D(*0H*"@H@("`@($X(3@A."$Y!"$$(00A!30A-"$T(344(`
- XM10A%"$4*("`@("`@("`@('1A<B`M('1A<&4@*&]R(&]T:&5R(&UE9&EA*2!A\
- XM<F-H:79E(&9I;&4@9F]R;6%T"@H@("`@($0(1`A$"$1%"$4(10A%4PA3"%,(#
- XM4T,(0PA#"$-2"%((4@A220A)"$D(25`(4`A0"%!4"%0(5`A420A)"$D(24\(F
- XM3PA/"$]."$X(3@A."B`@("`@("`@("!!(&!@=&%R('1A<&4G)R!O<B!F:6QE8
- XM(&-O;G1A:6YS(&$@<V5R:65S(&]F(')E8V]R9',N("!%86-H"B`@("`@("`@;
- XM("!R96-O<F0@8V]N=&%I;G,@5%)%0T]21%-)6D4@8GET97,@*'-E92!B96QOZ
- XM=RDN("!!;'1H;W5G:`H@("`@("`@("`@=&AI<R!F;W)M870@;6%Y(&)E('1H_
- XM;W5G:'0@;V8@87,@8F5I;F<@;VX@;6%G;F5T:6,@=&%P92P*("`@("`@("`@Z
- XM(&]T:&5R(&UE9&EA(&%R92!O9G1E;B!U<V5D+B`@16%C:"!F:6QE(&%R8VAI-
- XM=F5D(&ES"B`@("`@("`@("!R97!R97-E;G1E9"!B>2!A(&AE861E<B!R96-OT
- XM<F0@=VAI8V@@9&5S8W)I8F5S('1H92!F:6QE+`H@("`@("`@("`@9F]L;&]W'
- XM960@8GD@>F5R;R!O<B!M;W)E(')E8V]R9',@=VAI8V@@9VEV92!T:&4@8V]N)
- XM=&5N=',@;V8*("`@("`@("`@('1H92!F:6QE+B`@070@=&AE(&5N9"!O9B!T2
- XM:&4@87)C:&EV92!F:6QE('1H97)E(&UA>2!B92!A"B`@("`@("`@("!R96-O)
- XM<F0@9FEL;&5D('=I=&@@8FEN87)Y('IE<F]S(&%S(&%N(&5N9"UO9BUF:6QE#
- XM(&EN9&EC871O<BX*("`@("`@("`@($$@<F5A<V]N86)L92!S>7-T96T@<VAO!
- XM=6QD('=R:71E(&$@<F5C;W)D(&]F('IE<F]S(&%T('1H90H@("`@("`@("`@8
- XM96YD+"!B=70@;75S="!N;W0@87-S=6UE('1H870@86X@96YD+6]F+69I;&4@<
- XM<F5C;W)D(&5X:7-T<PH@("`@("`@("`@=VAE;B!R96%D:6YG(&%N(&%R8VAI+
- XM=F4N"@H@("`@("`@("`@5&AE(')E8V]R9',@;6%Y(&)E(&)L;V-K960@9F]RY
- XM('!H>7-I8V%L($DO3R!O<&5R871I;VYS+@H@("`@("`@("`@16%C:"!B;&]CQ
- XM:R!O9B!?"$X@<F5C;W)D<R`H=VAE<F4@7PA.(&ES('-E="!B>2!T:&4@+0@M%
- XM""T(+6((8@AB"&(@;W!T:6]N('1O"B`@("`@("`@("!?"'1?"&%?"'(I(&ESQ
- XM('=R:71T96X@=VET:"!A('-I;F=L92!W<FET92@I(&]P97)A=&EO;BX@($]ND
- XM"B`@("`@("`@("!M86=N971I8R!T87!E<RP@=&AE(')E<W5L="!O9B!S=6-HC
- XM(&$@=W)I=&4@:7,@82!S:6YG;&4@=&%P90H@("`@("`@("`@<F5C;W)D+B`@L
- XM5VAE;B!W<FET:6YG(&%N(&%R8VAI=F4L('1H92!L87-T(&)L;V-K(&]F(')E?
- XM8V]R9',*("`@("`@("`@('-H;W5L9"!B92!W<FET=&5N(&%T('1H92!F=6QLQ
- XM('-I>F4L('=I=&@@<F5C;W)D<R!A9G1E<B!T:&4*("`@("`@("`@('IE<F\@R
- XM<F5C;W)D(&-O;G1A:6YI;F<@86QL('IE<F]E<RX@(%=H96X@<F5A9&EN9R!A5
- XM;B!A<F-H:79E+`H@("`@("`@("`@82!R96%S;VYA8FQE('-Y<W1E;2!S:&]UG
- XM;&0@<')O<&5R;'D@:&%N9&QE(&%N(&%R8VAI=F4@=VAO<V4*("`@("`@("`@:
- XM(&QA<W0@8FQO8VL@:7,@<VAO<G1E<B!T:&%N('1H92!R97-T+"!O<B!W:&ECD
- XM:"!C;VYT86EN<PH@("`@("`@("`@9V%R8F%G92!R96-O<F1S(&%F=&5R(&$@?
- XM>F5R;R!R96-O<F0N"@H@("`@("`@("`@5&AE(&AE861E<B!R96-O<F0@:7,@&
- XM9&5F:6YE9"!I;B!T:&4@:&5A9&5R(&9I;&4@/'1A<BYH/B!A<PH@("`@("`@%
- XM("`@9F]L;&]W<SH*&SD@("`@("`@("`@+RH*("`@("`@("`@("`J(%-T86YD%
- XM87)D($%R8VAI=F4@1F]R;6%T("T@4W1A;F1A<F0@5$%2("T@55-405(*("`@M
- XM("`@("`@("`J+PH@("`@("`@("`@(V1E9FEN92`@(%)%0T]21%-)6D4@("`@+
- XM(#4Q,@H@("`@("`@("`@(V1E9FEN92`@($Y!35-)6B`@("`Q,#`*("`@("`@=
- XM("`@("-D969I;F4@("!454Y-3$5.("`@,S(*("`@("`@("`@("-D969I;F4@.
- XM("!41TY-3$5.("`@,S(*"B`@("`@("`@("!U;FEO;B!R96-O<F0@>PH@("`@;
- XM("`@("`@("`@("!C:&%R("`@("`@8VAA<G!T<EM214-/4D1325I%73L*("`@)
- XM("`@("`@("`@("`@<W1R=6-T(&AE861E<B!["B`@("`@("`@("`@("`@("`@S
- XM("`@8VAA<B!N86UE6TY!35-)6ET["B`@("`@("`@("`@("`@("`@("`@8VAAZ
- XM<B!M;V1E6SA=.PH@("`@("`@("`@("`@("`@("`@(&-H87(@=6ED6SA=.PH@!
- XM("`@("`@("`@("`@("`@("`@(&-H87(@9VED6SA=.PH@("`@("`@("`@("`@G
- XM("`@("`@(&-H87(@<VEZ95LQ,ET["B`@("`@("`@("`@("`@("`@("`@8VAAE
- XM<B!M=&EM95LQ,ET["B`@("`@("`@("`@("`@("`@("`@8VAA<B!C:&MS=6U;R
- XM.%T["B`@("`@("`@("`@("`@("`@("`@8VAA<B!L:6YK9FQA9SL*("`@("`@E
- XM("`@("`@("`@("`@("!C:&%R(&QI;FMN86UE6TY!35-)6ET["B`@("`@("`@<
- XM("`@("`@("`@("`@8VAA<B!M86=I8ULX73L*("`@("`@("`@("`@("`@("`@T
- XM("!C:&%R('5N86UE6U153DU,14Y=.PH@("`@("`@("`@("`@("`@("`@(&-H_
- XM87(@9VYA;65;5$=.34Q%3ET["@H*&SD@("`@(%!A9V4@,2`@("`@("`@("`@#
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`H<')I;G1E9"`S+S@O'
- XM.3`I"@H*"@H*"B`@("`@5`A4"%0(5$$(00A!"$%2"%((4@A2*`@H""@(*#4(1
- XM-0@U"#4I""D(*0@I("`@("`@("`@("`@($$(00A!"$%M"&T(;0AM:0AI"&D(&
- XM:6<(9PAG"&=A"&$(80AA1`A$"$0(1$\(3PA/"$]3"%,(4PA3("@(*`@H""@QB
- XM"#$(,0@Q-0@U"#4(-2!/"$\(3PA/8PAC"&,(8W0(=`AT"'1O"&\(;PAO8@ABW
- XM"&((8F4(90AE"&5R"'((<@AR(#$(,0@Q"#$Y"#D(.0@Y.`@X"#@(.#<(-P@W%
- XM"#<I""D(*0@I("`@("`@("`@("`@("!4"%0(5`A400A!"$$(05((4@A2"%(H'
- XM""@(*`@H-0@U"#4(-2D(*0@I""D*"@H*("`@("`@("`@("`@("`@("`@("!C#
- XM:&%R(&1E=FUA:F]R6SA=.PH@("`@("`@("`@("`@("`@("`@(&-H87(@9&5VE
- XM;6EN;W);.%T["B`@("`@("`@("`@("`@('T@:&5A9&5R.PH@("`@("`@("`@%
- XM?3L*"B`@("`@("`@("`O*B!4:&4@8VAE8VMS=6T@9FEE;&0@:7,@9FEL;&5D)
- XM('=I=&@@=&AI<R!W:&EL92!T:&4@8VAE8VMS=6T@:7,@8V]M<'5T960N("HOE
- XM"B`@("`@("`@("`C9&5F:6YE("`@0TA+0DQ!3DM3("(@("`@("`@("(@("`@M
- XM("`@("`@+RH@."!B;&%N:W,L(&YO(&YU;&P@*B\*"B`@("`@("`@("`O*B!4J
- XM:&4@;6%G:6,@9FEE;&0@:7,@9FEL;&5D('=I=&@@=&AI<R!I9B!U;F%M92!AX
- XM;F0@9VYA;64@87)E('9A;&ED+B`J+PH@("`@("`@("`@(V1E9FEN92`@(%1-"
- XM04=)0R`@("`B=7-T87(@("(@("`@("`O*B`W(&-H87)S(&%N9"!A(&YU;&P@W
- XM*B\*"B`@("`@("`@("`O*B!4:&4@;&EN:V9L86<@9&5F:6YE<R!T:&4@='EP+
- XM92!O9B!F:6QE("HO"B`@("`@("`@("`C9&5F:6YE("`@3$9?3TQ$3D]234%,D
- XM("=<,"<@("`@("`@("\J($YO<FUA;"!D:7-K(&9I;&4L(%5N:7@@8V]M<&%T[
- XM:6)L92`J+PH@("`@("`@("`@(V1E9FEN92`@($Q&7TY/4DU!3"`G,"<@("`@E
- XM("`@+RH@3F]R;6%L(&1I<VL@9FEL92`J+PH@("`@("`@("`@(V1E9FEN92`@>
- XM($Q&7TQ)3DL@("`G,2<@("`@("`@+RH@3&EN:R!T;R!P<F5V:6]U<VQY(&1U#
- XM;7!E9"!F:6QE("HO"B`@("`@("`@("`C9&5F:6YE("`@3$9?4UE-3$E.2R`@O
- XM("`@)S(G("`@("`@("\J(%-Y;6)O;&EC(&QI;FL@*B\*("`@("`@("`@("-D3
- XM969I;F4@("!,1E]#2%(@("`@)S,G("`@("`@("\J($-H87)A8W1E<B!S<&5CG
- XM:6%L(&9I;&4@*B\*("`@("`@("`@("-D969I;F4@("!,1E]"3$L@("`@)S0GS
- XM("`@("`@("\J($)L;V-K('-P96-I86P@9FEL92`J+PH@("`@("`@("`@(V1ET
- XM9FEN92`@($Q&7T1)4B`@("`@("`@("<U)R`@("`@("`O*B!$:7)E8W1O<GD@C
- XM*B\*("`@("`@("`@("-D969I;F4@("!,1E]&249/("`@)S8G("`@("`@("\J#
- XM($9)1D\@<W!E8VEA;"!F:6QE("HO"B`@("`@("`@("`C9&5F:6YE("`@3$9?G
- XM0T].5$E'("<W)R`@("`@("`O*B!#;VYT:6=U;W5S(&9I;&4@*B\*("`@("`@U
- XM("`@("\J($9U<G1H97(@;&EN:R!T>7!E<R!M87D@8F4@9&5F:6YE9"!L871E_
- XM<BX@*B\*"B`@("`@("`@("`O*B!":71S('5S960@:6X@=&AE(&UO9&4@9FEEZ
- XM;&0@+2!V86QU97,@:6X@;V-T86P@*B\*("`@("`@("`@("-D969I;F4@("!4\
- XM4U5)1"`@("`@("`@("`P-#`P,"`@("`@("`@("`O*B!3970@54E$(&]N(&5X*
- XM96-U=&EO;B`J+PH@("`@("`@("`@(V1E9FEN92`@(%131TE$("`@("`@("`@#
- XM(#`R,#`P("`@("`@("`@("\J(%-E="!'240@;VX@97AE8W5T:6]N("HO"B`@?
- XM("`@("`@("`C9&5F:6YE("`@5%-65%@@("`@("`@("`@,#$P,#`@("`@("`@H
- XM("`@+RH@4V%V92!T97AT("AS=&EC:WD@8FET*2`J+PH*("`@("`@("`@("\J:
- XM($9I;&4@<&5R;6ES<VEO;G,@*B\*("`@("`@("`@("-D969I;F4@("!455)%M
- XM040@("`@,#`T,#`@("`@("`@("`@+RH@<F5A9"!B>2!O=VYE<B`J+PH@("`@7
- XM("`@("`@(V1E9FEN92`@(%155U))5$4@("`P,#(P,"`@("`@("`@("`O*B!WD
- XM<FET92!B>2!O=VYE<B`J+PH@("`@("`@("`@(V1E9FEN92`@(%1515A%0R`@Y
- XM("`P,#$P,"`@("`@("`@("`O*B!E>&5C=71E+W-E87)C:"!B>2!O=VYE<B`J2
- XM+PH@("`@("`@("`@(V1E9FEN92`@(%1'4D5!1"`@("`P,#`T,"`@("`@("`@2
- XM("`O*B!R96%D(&)Y(&=R;W5P("HO"B`@("`@("`@("`C9&5F:6YE("`@5$=7`
- XM4DE412`@(#`P,#(P("`@("`@("`@("\J('=R:71E(&)Y(&=R;W5P("HO"B`@U
- XM("`@("`@("`C9&5F:6YE("`@5$=%6$5#("`@(#`P,#$P("`@("`@("`@("\JX
- XM(&5X96-U=&4O<V5A<F-H(&)Y(&=R;W5P("HO"B`@("`@("`@("`C9&5F:6YE1
- XM("`@5$]214%$("`@(#`P,#`T("`@("`@("`@("\J(')E860@8GD@;W1H97(@%
- XM*B\*("`@("`@("`@("-D969I;F4@("!43U=2251%("`@,#`P,#(@("`@("`@Q
- XM("`@+RH@=W)I=&4@8GD@;W1H97(@*B\*("`@("`@("`@("-D969I;F4@("!4&
- XM3T5814,@("`@,#`P,#$@("`@("`@("`@+RH@97AE8W5T92]S96%R8V@@8GD@1
- XM;W1H97(@*B\*"B`@("`@("`@("!!;&P@8VAA<F%C=&5R<R!I;B!H96%D97(@H
- XM<F5C;W)D<R!A<F4@<F5P<F5S96YT960@=7-I;F<@."UB:70*("`@("`@("`@_
- XM(&-H87)A8W1E<G,@:6X@=&AE(&QO8V%L('9A<FEA;G0@;V8@05-#24DN("!%)
- XM86-H(&9I96QD('=I=&AI;@H@("`@("`@("`@=&AE('-T<G5C='5R92!I<R!C>
- XM;VYT:6=U;W5S.R!T:&%T(&ES+"!T:&5R92!I<R!N;R!P861D:6YG"B`@("`@S
- XM("`@("!U<V5D('=I=&AI;B!T:&4@<W1R=6-T=7)E+B`@16%C:"!C:&%R86-T+
- XM97(@;VX@=&AE(&%R8VAI=F4*("`@("`@("`@(&UE9&EU;2!I<R!S=&]R960@/
- XM8V]N=&EG=6]U<VQY+@H*("`@("`@("`@($)Y=&5S(')E<')E<V5N=&EN9R!T(
- XM:&4@8V]N=&5N=',@;V8@9FEL97,@*&%F=&5R('1H92!H96%D97(*("`@("`@1
- XM("`@(')E8V]R9"!O9B!E86-H(&9I;&4I(&%R92!N;W0@=')A;G-L871E9"!IR
- XM;B!A;GD@=V%Y(&%N9"!A<F4*("`@("`@("`@(&YO="!C;VYS=')A:6YE9"!T;
- XM;R!R97!R97-E;G0@8VAA<F%C=&5R<R!O<B!T;R!B92!I;B!A;GD*("`@("`@[
- XM("`@(&-H87)A8W1E<B!S970N("!4:&4@7PAT7PAA7PAR*#4I(&9O<FUA="!DW
- XM;V5S(&YO="!D:7-T:6YG=6ES:"!T97AT"B`@("`@("`@("!F:6QE<R!F<F]M9
- XM(&)I;F%R>2!F:6QE<RP@86YD(&YO('1R86YS;&%T:6]N(&]F(&9I;&4@8V]NX
- XM=&5N=',*("`@("`@("`@('-H;W5L9"!B92!P97)F;W)M960N"@H*"@H@("`@R
- XM(%!A9V4@,B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@O
- XM("`@("`H<')I;G1E9"`S+S@O.3`I"@H*"@H*"B`@("`@5`A4"%0(5$$(00A!:
- XM"$%2"%((4@A2*`@H""@(*#4(-0@U"#4I""D(*0@I("`@("`@("`@("`@($$(R
- XM00A!"$%M"&T(;0AM:0AI"&D(:6<(9PAG"&=A"&$(80AA1`A$"$0(1$\(3PA/0
- XM"$]3"%,(4PA3("@(*`@H""@Q"#$(,0@Q-0@U"#4(-2!/"$\(3PA/8PAC"&,(0
- XM8W0(=`AT"'1O"&\(;PAO8@AB"&((8F4(90AE"&5R"'((<@AR(#$(,0@Q"#$Y`
- XM"#D(.0@Y.`@X"#@(.#<(-P@W"#<I""D(*0@I("`@("`@("`@("`@("!4"%0(C
- XM5`A400A!"$$(05((4@A2"%(H""@(*`@H-0@U"#4(-2D(*0@I""D*"@H*("`@4
- XM("`@("`@(%1H92!F:65L9',@7PAN7PAA7PAM7PAE+"!?"&Q?"&E?"&Y?"&M?J
- XM"&Y?"&%?"&U?"&4L(%\(;5\(85\(9U\(:5\(8RP@7PAU7PAN7PAA7PAM7PAE3
- XM+"!A;F0@7PAG7PAN7PAA7PAM7PAE(&%R90H@("`@("`@("`@;G5L;"UT97)ML
- XM:6YA=&5D(&-H87)A8W1E<B!S=')I;F=S+B`@06QL(&]T:&5R(&9I96QD<R!A-
- XM<F4*("`@("`@("`@('IE<F\M9FEL;&5D(&]C=&%L(&YU;6)E<G,@:6X@05-#[
- XM24DN("!%86-H(&YU;65R:6,@9FEE;&0@*&]F"B`@("`@("`@("!W:61T:"!?N
- XM"'<I(&-O;G1A:6YS(%\(=RTR(&1I9VET<RP@82!S<&%C92P@86YD(&$@;G5LP
- XM;"P@97AC97!T"B`@("`@("`@("!?"'-?"&E?"'I?"&4@86YD(%\(;5\(=%\(K
- XM:5\(;5\(92P@=VAI8V@@9&\@;F]T(&-O;G1A:6X@=&AE('1R86EL:6YG(&YUV
- XM;&PN"@H@("`@("`@("`@5&AE(%\(;E\(85\(;5\(92!F:65L9"!I<R!T:&4@Y
- XM<&%T:&YA;64@;V8@=&AE(&9I;&4L('=I=&@@9&ER96-T;W)Y"B`@("`@("`@K
- XM("!N86UE<R`H:68@86YY*2!P<F5C961I;F<@=&AE(&9I;&4@;F%M92P@<V5P#
- XM87)A=&5D(&)Y"B`@("`@("`@("!S;&%S:&5S+@H*("`@("`@("`@(%1H92!?+
- XM"&U?"&]?"&1?"&4@9FEE;&0@<')O=FED97,@;FEN92!B:71S('-P96-I9GEIJ
- XM;F<@9FEL90H@("`@("`@("`@<&5R;6ES<VEO;G,@86YD('1H<F5E(&)I=',@8
- XM=&\@<W!E8VEF>2!T:&4@4V5T(%5)1"P@4V5T($=)1`H@("`@("`@("`@86YD.
- XM(%-A=F4@5&5X="`H5%-65%@I(&UO9&5S+B`@5F%L=65S(&9O<B!T:&5S92!B&
- XM:71S(&%R90H@("`@("`@("`@9&5F:6YE9"!A8F]V92X@(%=H96X@<W!E8VEA#
- XM;"!P97)M:7-S:6]N<R!A<F4@<F5Q=6ER960@=&\*("`@("`@("`@(&-R96%T]
- XM92!A(&9I;&4@=VET:"!A(&=I=F5N(&UO9&4L(&%N9"!T:&4@=7-E<B!R97-T>
- XM;W)I;F<*("`@("`@("`@(&9I;&5S(&9R;VT@=&AE(&%R8VAI=F4@9&]E<R!N,
- XM;W0@:&]L9"!S=6-H('!E<FUI<W-I;VYS+"!T:&4*("`@("`@("`@(&UO9&4@U
- XM8FET*',I('-P96-I9GEI;F<@=&AO<V4@<W!E8VEA;"!P97)M:7-S:6]N<R!AU
- XM<F4*("`@("`@("`@(&EG;F]R960N("!-;V1E<R!W:&EC:"!A<F4@;F]T('-US
- XM<'!O<G1E9"!B>2!T:&4@;W!E<F%T:6YG"B`@("`@("`@("!S>7-T96T@<F5S<
- XM=&]R:6YG(&9I;&5S(&9R;VT@=&AE(&%R8VAI=F4@=VEL;"!B92!I9VYO<F5D$
- XM+@H@("`@("`@("`@56YS=7!P;W)T960@;6]D97,@<VAO=6QD(&)E(&9A:V5D*
- XM('5P('=H96X@8W)E871I;F<@86X*("`@("`@("`@(&%R8VAI=F4[(&4N9RX@"
- XM('1H92!G<F]U<"!P97)M:7-S:6]N(&-O=6QD(&)E(&-O<&EE9"!F<F]M('1H9
- XM90H@("`@("`@("`@8&]T:&5R)R!P97)M:7-S:6]N+@H*("`@("`@("`@(%1H_
- XM92!?"'5?"&E?"&0@86YD(%\(9U\(:5\(9"!F:65L9',@87)E('1H92!U<V5R'
- XM(&%N9"!G<F]U<"!)1"!O9B!T:&4@9FEL90H@("`@("`@("`@;W=N97)S+"!R)
- XM97-P96-T:79E;'DN"@H@("`@("`@("`@5&AE(%\(<U\(:5\(>E\(92!F:65L'
- XM9"!I<R!T:&4@<VEZ92!O9B!T:&4@9FEL92!I;B!B>71E<SL@;&EN:V5D"B`@,
- XM("`@("`@("!F:6QE<R!A<F4@87)C:&EV960@=VET:"!T:&ES(&9I96QD('-PL
- XM96-I9FEE9"!A<R!Z97)O+@H*("`@("`@("`@(%1H92!?"&U?"'1?"&E?"&U?2
- XM"&4@9FEE;&0@:7,@=&AE(&UO9&EF:6-A=&EO;B!T:6UE(&]F('1H92!F:6QEI
- XM(&%T('1H90H@("`@("`@("`@=&EM92!I="!W87,@87)C:&EV960N("!)="!I1
- XM<R!T:&4@05-#24D@<F5P<F5S96YT871I;VX@;V8@=&AE"B`@("`@("`@("!O_
- XM8W1A;"!V86QU92!O9B!T:&4@;&%S="!T:6UE('1H92!F:6QE('=A<R!M;V1IO
- XM9FEE9"P*("`@("`@("`@(')E<')E<V5N=&5D(&%S(&EN(&EN=&5G97(@;G5M8
- XM8F5R(&]F('-E8V]N9',@<VEN8V4@2F%N=6%R>2`Q+`H@("`@("`@("`@,3DW1
- XM,"P@,#`Z,#`@0V]O<F1I;F%T960@56YI=F5R<V%L(%1I;64N"@H@("`@("`@L
- XM("`@5&AE(%\(8U\(:%\(:U\(<U\(=5\(;2!F:65L9"!I<R!T:&4@05-#24D@`
- XM<F5P<F5S96YT86EO;B!O9B!T:&4@;V-T86P*("`@("`@("`@('9A;'5E(&]FD
- XM('1H92!S:6UP;&4@<W5M(&]F(&%L;"!B>71E<R!I;B!T:&4@:&5A9&5R(')EM
- XM8V]R9"X*("`@("`@("`@($5A8V@@."UB:70@8GET92!I;B!T:&4@:&5A9&5R*
- XM(&ES('1R96%T960@87,@86X@=6YS:6=N960*("`@("`@("`@('9A;'5E+B`@Z
- XM5&AE<V4@=F%L=65S(&%R92!A9&1E9"!T;R!A;B!U;G-I9VYE9"!I;G1E9V5R0
- XM+`H@("`@("`@("`@:6YI=&EA;&EZ960@=&\@>F5R;RP@=&AE('!R96-I<VEOZ
- XM;B!O9B!W:&EC:"!S:&%L;"!B92!N;R!L97-S"B`@("`@("`@("!T:&%N('-ER
- XM=F5N=&5E;B!B:71S+B`@5VAE;B!C86QC=6QA=&EN9R!T:&4@8VAE8VMS=6TLN
- XM('1H90H@("`@("`@("`@7PAC7PAH7PAK7PAS7PAU7PAM(&9I96QD(&ES('1R&
- XM96%T960@87,@:68@:70@=V5R92!A;&P@8FQA;FMS+@H*("`@("`@("`@(%1HH
- XM92!?"'1?"'E?"'!?"&5?"&9?"&Q?"&%?"&<@9FEE;&0@<W!E8VEF:65S('1H4
- XM92!T>7!E(&]F(&9I;&4@87)C:&EV960N("!)9@H@("`@("`@("`@82!P87)T!
- XM:6-U;&%R(&EM<&QE;65N=&%T:6]N(&1O97,@;F]T(')E8V]G;FEZ92!O<B!PY
- XM97)M:70@=&AE"B`@("`@("`@("!S<&5C:69I960@='EP92P@=&AE(&9I;&4@'
- XM=VEL;"!B92!E>'1R86-T960@87,@:68@:70@=V5R92!A"B`@("`@("`@("!RS
- XM96=U;&%R(&9I;&4N("!!<R!T:&ES(&%C=&EO;B!O8V-U<G,L(%\(=%\(85\(=
- XM<B!I<W-U97,@82!W87)N:6YG"B`@("`@("`@("!T;R!T:&4@<W1A;F1A<F0@D
- XM97)R;W(N"@H@("`@("`@("`@3$9?3D]234%,(&]R($Q&7T],1$Y/4DU!3`H@*
- XM("`@("`@("`@("`@("!R97!R97-E;G1S(&$@<F5G=6QA<B!F:6QE+B`@1F]RS
- XM(&)A8VMW87)D(&-O;7!A=&EB:6QI='DL"B`@("`@("`@("`@("`@(&$@7PATK
- XM7PAY7PAP7PAE7PAF7PAL7PAA7PAG('9A;'5E(&]F($Q&7T],1$Y/4DU!3"!SW
- XM:&]U;&0@8F4@<VEL96YT;'D*"@H*("`@("!086=E(#,@("`@("`@("`@("`@/
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@*'!R:6YT960@,R\X+SDPP
- XM*0H*"@H*"@H@("`@(%0(5`A4"%1!"$$(00A!4@A2"%((4B@(*`@H""@U"#4(E
- XM-0@U*0@I""D(*2`@("`@("`@("`@("!!"$$(00A!;0AM"&T(;6D(:0AI"&EG9
- XM"&<(9PAG80AA"&$(840(1`A$"$1/"$\(3PA/4PA3"%,(4R`H""@(*`@H,0@Q+
- XM"#$(,34(-0@U"#4@3PA/"$\(3V,(8PAC"&-T"'0(=`AT;PAO"&\(;V((8@ABH
- XM"&)E"&4(90AE<@AR"'((<B`Q"#$(,0@Q.0@Y"#D(.3@(.`@X"#@W"#<(-P@W:
- XM*0@I""D(*2`@("`@("`@("`@("`@5`A4"%0(5$$(00A!"$%2"%((4@A2*`@HX
- XM""@(*#4(-0@U"#4I""D(*0@I"@H*"B`@("`@("`@("`@("`@(')E8V]G;FEZQ
- XM960@87,@82!R96=U;&%R(&9I;&4N("!.97<@87)C:&EV97,@<VAO=6QD(&)ES
- XM"B`@("`@("`@("`@("`@(&-R96%T960@=7-I;F<@3$9?3D]234%,+B`@06QSP
- XM;RP@9F]R(&)A8VMW87)D"B`@("`@("`@("`@("`@(&-O;7!A=&%B:6QI='DLI
- XM(%\(=%\(85\(<B!T<F5A=',@82!R96=U;&%R(&9I;&4@=VAO<V4@;F%M90H@3
- XM("`@("`@("`@("`@("!E;F1S('=I=&@@82!S;&%S:"!A<R!A(&1I<F5C=&]RS
- XM>2X*"B`@("`@("`@("!,1E],24Y+"B`@("`@("`@("`@("`@(')E<')E<V5NH
- XM=',@82!F:6QE(&QI;FME9"!T;R!A;F]T:&5R(&9I;&4L(&]F(&%N>2!T>7!E^
- XM+`H@("`@("`@("`@("`@("!P<F5V:6]U<VQY(&%R8VAI=F5D+B`@4W5C:"!FE
- XM:6QE<R!A<F4@:61E;G1I9FEE9"!I;B!5;FEX"B`@("`@("`@("`@("`@(&)YZ
- XM(&5A8V@@9FEL92!H879I;F<@=&AE('-A;64@9&5V:6-E(&%N9"!I;F]D92!N5
- XM=6UB97(N"B`@("`@("`@("`@("`@(%1H92!L:6YK960M=&\@;F%M92!I<R!S+
- XM<&5C:69I960@:6X@=&AE(%\(;%\(:5\(;E\(:U\(;E\(85\(;5\(92!F:65LX
- XM9`H@("`@("`@("`@("`@("!W:71H(&$@=')A:6QI;F<@;G5L;"X*"B`@("`@"
- XM("`@("!,1E]364U,24Y+"B`@("`@("`@("`@("`@(')E<')E<V5N=',@82!S!
- XM>6UB;VQI8R!L:6YK('1O(&%N;W1H97(@9FEL92X@(%1H90H@("`@("`@("`@J
- XM("`@("!L:6YK960M=&\@;F%M92!I<R!S<&5C:69I960@:6X@=&AE(%\(;%\(B
- XM:5\(;E\(:U\(;E\(85\(;5\(92!F:65L9"!W:71H"B`@("`@("`@("`@("`@7
- XM(&$@=')A:6QI;F<@;G5L;"X*"B`@("`@("`@("!,1E]#2%(@;W(@3$9?0DQ+1
- XM"B`@("`@("`@("`@("`@(')E<')E<V5N="!C:&%R86-T97(@<W!E8VEA;"!F6
- XM:6QE<R!A;F0@8FQO8VL@<W!E8VEA;`H@("`@("`@("`@("`@("!F:6QE<R!R[
- XM97-P96-T:79E;'DN("!);B!T:&ES(&-A<V4@=&AE(%\(9%\(95\(=E\(;5\(6
- XM85\(:E\(;U\(<B!A;F0*("`@("`@("`@("`@("`@7PAD7PAE7PAV7PAM7PAIV
- XM7PAN7PAO7PAR(&9I96QD<R!W:6QL(&-O;G1A:6X@=&AE(&UA:F]R(&%N9"!MY
- XM:6YO<B!D979I8V4*("`@("`@("`@("`@("`@;G5M8F5R<R!R97-P96-T:79E(
- XM;'DN("!/<&5R871I;F<@<WES=&5M<R!M87D@;6%P('1H90H@("`@("`@("`@D
- XM("`@("!D979I8V4@<W!E8VEF:6-A=&EO;G,@=&\@=&AE:7(@;W=N(&QO8V%LB
- XM('-P96-I9FEC871I;VXL"B`@("`@("`@("`@("`@(&]R(&UA>2!I9VYO<F4@C
- XM=&AE(&5N=')Y+@H*("`@("`@("`@($Q&7T1)4@H@("`@("`@("`@("`@("!S"
- XM<&5C:69I97,@82!D:7)E8W1O<GD@;W(@<W5B+61I<F5C=&]R>2X@(%1H92!D^
- XM:7)E8W1O<GD*("`@("`@("`@("`@("`@;F%M92!I;B!T:&4@7PAN7PAA7PAME
- XM7PAE(&9I96QD('-H;W5L9"!E;F0@=VET:"!A('-L87-H+B`@3VX*("`@("`@#
- XM("`@("`@("`@<WES=&5M<R!W:&5R92!D:7-K(&%L;&]C871I;VX@:7,@<&5RG
- XM9F]R;65D(&]N(&$*("`@("`@("`@("`@("`@9&ER96-T;W)Y(&)A<VES('1HH
- XM92!?"'-?"&E?"'I?"&4@9FEE;&0@=VEL;"!C;VYT86EN('1H92!M87AI;75MC
- XM"B`@("`@("`@("`@("`@(&YU;6)E<B!O9B!B>71E<R`H=VAI8V@@;6%Y(&)E8
- XM(')O=6YD960@=&\@=&AE(&YE87)E<W0*("`@("`@("`@("`@("`@9&ES:R!B>
- XM;&]C:R!A;&QO8V%T:6]N('5N:70I('=H:6-H('1H92!D:7)E8W1O<GD@;6%YH
- XM"B`@("`@("`@("`@("`@(&AO;&0N("!!(%\(<U\(:5\(>E\(92!F:65L9"!OJ
- XM9B!Z97)O(&EN9&EC871E<R!N;R!S=6-H(&QI;6ET:6YG+@H@("`@("`@("`@?
- XM("`@("!3>7-T96US('=H:6-H(&1O(&YO="!S=7!P;W)T(&QI;6ET:6YG(&EN@
- XM('1H:7,@;6%N;F5R"B`@("`@("`@("`@("`@('-H;W5L9"!I9VYO<F4@=&AEW
- XM(%\(<U\(:5\(>E\(92!F:65L9"X*"B`@("`@("`@("!,1E]&249/"B`@("`@<
- XM("`@("`@("`@('-P96-I9FEE<R!A($9)1D\@<W!E8VEA;"!F:6QE+B`@3F]T@
- XM92!T:&%T('1H92!A<F-H:79I;F<*("`@("`@("`@("`@("`@;V8@82!&249/V
- XM(&9I;&4@87)C:&EV97,@=&AE(&5X:7-T96YC92!O9B!T:&ES(&9I;&4@86YD>
- XM"B`@("`@("`@("`@("`@(&YO="!I=',@8V]N=&5N=',N"@H@("`@("`@("`@[
- XM3$9?0T].5$E'"B`@("`@("`@("`@("`@('-P96-I9FEE<R!A(&-O;G1I9W5OC
- XM=7,@9FEL92P@=VAI8V@@:7,@=&AE('-A;64@87,@80H@("`@("`@("`@("`@)
- XM("!N;W)M86P@9FEL92!E>&-E<'0@=&AA="P@:6X@;W!E<F%T:6YG('-Y<W1EG
- XM;7,@=VAI8V@*("`@("`@("`@("`@("`@<W5P<&]R="!I="P@86QL(&ET<R!S?
- XM<&%C92!I<R!A;&QO8V%T960@8V]N=&EG=6]U<VQY(&]N"B`@("`@("`@("`@:
- XM("`@('1H92!D:7-K+B`@3W!E<F%T:6YG('-Y<W1E;7,@=VAI8V@@9&\@;F]TR
- XM(&%L;&]W"B`@("`@("`@("`@("`@(&-O;G1I9W5O=7,@86QL;V-A=&EO;B!S2
- XM:&]U;&0@<VEL96YT;'D@=')E870@=&AI<R!T>7!E"B`@("`@("`@("`@("`@T
- XM(&%S(&$@;F]R;6%L(&9I;&4N"@H@("`@("`@("`@8$$G("T@8%HG"B`@("`@@
- XM("`@("`@("`@(&%R92!R97-E<G9E9"!F;W(@8W5S=&]M(&EM<&QE;65N=&%T:
- XM:6]N<RX@($YO;F4@87)E('5S960*("`@("`@("`@("`@("`@8GD@=&AI<R!V3
- XM97)S:6]N(&]F('1H92!?"'1?"&%?"'(@<')O9W)A;2X*"@H*("`@("!086=E-
- XM(#0@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@T
- XM*'!R:6YT960@,R\X+SDP*0H*"@H*"@H@("`@(%0(5`A4"%1!"$$(00A!4@A2O
- XM"%((4B@(*`@H""@U"#4(-0@U*0@I""D(*2`@("`@("`@("`@("!!"$$(00A!0
- XM;0AM"&T(;6D(:0AI"&EG"&<(9PAG80AA"&$(840(1`A$"$1/"$\(3PA/4PA3"
- XM"%,(4R`H""@(*`@H,0@Q"#$(,34(-0@U"#4@3PA/"$\(3V,(8PAC"&-T"'0(F
- XM=`AT;PAO"&\(;V((8@AB"&)E"&4(90AE<@AR"'((<B`Q"#$(,0@Q.0@Y"#D(O
- XM.3@(.`@X"#@W"#<(-P@W*0@I""D(*2`@("`@("`@("`@("`@5`A4"%0(5$$(2
- XM00A!"$%2"%((4@A2*`@H""@(*#4(-0@U"#4I""D(*0@I"@H*"B`@("`@("`@[
- XM("!?"&]?"'1?"&A?"&5?"'(*("`@("`@("`@("`@("`@=F%L=65S(&%R92!R)
- XM97-E<G9E9"!F;W(@<W!E8VEF:6-A=&EO;B!I;B!F=71U<F4*("`@("`@("`@R
- XM("`@("`@<F5V:7-I;VYS(&]F('1H92!0,3`P,R!S=&%N9&%R9"P@86YD('-H7
- XM;W5L9"!N;W0@8F4@=7-E9`H@("`@("`@("`@("`@("!B>2!A;GD@7PAT7PAA-
- XM7PAR('!R;V=R86TN"@H@("`@("`@("`@5&AE(%\(;5\(85\(9U\(:5\(8R!F^
- XM:65L9"!I;F1I8V%T97,@=&AA="!T:&ES(&%R8VAI=F4@=V%S(&]U='!U="!IB
- XM;@H@("`@("`@("`@=&AE(%`Q,#`S(&%R8VAI=F4@9F]R;6%T+B`@268@=&AI:
- XM<R!F:65L9"!C;VYT86EN<R!434%'24,L"B`@("`@("`@("!T:&5N('1H92!?P
- XM"'5?"&Y?"&%?"&U?"&4@86YD(%\(9U\(;E\(85\(;5\(92!F:65L9',@=VEL[
- XM;"!C;VYT86EN('1H92!!4T-)20H@("`@("`@("`@<F5P<F5S96YT871I;VX@_
- XM;V8@=&AE(&]W;F5R(&%N9"!G<F]U<"!O9B!T:&4@9FEL90H@("`@("`@("`@!
- XM<F5S<&5C=&EV96QY+B`@268@9F]U;F0L('1H92!U<V5R(&%N9"!G<F]U<"!)M
- XM1"!R97!R97-E;G1E9`H@("`@("`@("`@8GD@=&AE<V4@;F%M97,@=VEL;"!BQ
- XM92!U<V5D(')A=&AE<B!T:&%N('1H92!V86QU97,@8V]N=&%I;F5D"B`@("`@W
- XM("`@("!W:71H:6X@=&AE(%\(=5\(:5\(9"!A;F0@7PAG7PAI7PAD(&9I96QDK
- XM<RX@(%5S97(@;F%M97,@;&]N9V5R('1H86X*("`@("`@("`@(%153DU,14XM`
- XM,2!O<B!G<F]U<"!N86UE<R!L;VYG97(@=&AA;B!41TY-3$5.+3$@8VAA<F%CZ
- XM=&5R<PH@("`@("`@("`@=VEL;"!B92!T<G5N8V%T960N"@H@("`@(%,(4PA3\
- XM"%-%"$4(10A%10A%"$4(12!!"$$(00A!3`A,"$P(3%,(4PA3"%-/"$\(3PA/O
- XM"B`@("`@("`@("!T87(H,2DL(&%R*#4I+"!C<&EO*#4I+"!D=6UP*#@I+"!R^
- XM97-T;W(H."DL(')E<W1O<F4H."D*"B`@("`@0@A""$((0E4(50A5"%5'"$<(M
- XM1PA'4PA3"%,(4PH@("`@("`@("`@3F%M97,@;W(@;&EN:R!N86UE<R!L;VYG+
- XM97(@=&AA;B!.04U325HM,2!C:&%R86-T97)S(&-A;FYO=`H@("`@("`@("`@?
- XM8F4@87)C:&EV960N"@H@("`@("`@("`@5&AI<R!F;W)M870@9&]E<R!N;W0@,
- XM>65T(&%D9')E<W,@;75L=&DM=F]L=6UE(&%R8VAI=F5S+@H*("`@("!."$X(K
- XM3@A.3PA/"$\(3U0(5`A4"%1%"$4(10A%4PA3"%,(4PH@("`@("`@("`@5&AI?
- XM<R!M86YU86P@<&%G92!W87,@861A<'1E9"!B>2!*;VAN($=I;&UO<F4@9G)OL
- XM;2!$<F%F="`V(&]F"B`@("`@("`@("!T:&4@4#$P,#,@<W!E8VEF:6-A=&EO;
- XM;@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*("`@("!086=E(#4@("`@"
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@*'!R:6YTU
- X.960@,R\X+SDP*0H*"@H@,
- X``
- Xend
- Xsize 13919
- END_OF_FILE
- if test 19528 -ne `wc -c <'tar.5.man.uu'`; then
- echo shar: \"'tar.5.man.uu'\" unpacked with wrong size!
- fi
- # end of 'tar.5.man.uu'
- fi
- echo shar: End of archive 4 \(of 5\).
- cp /dev/null ark4isdone
- MISSING=""
- for I in 1 2 3 4 5 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 5 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
- Mail comments to the moderator at <amiga-request@cs.odu.edu>.
- Post requests for sources, and general discussion to comp.sys.amiga.
-